#include<iostream>
#include<unistd.h>
#include<pthread.h>

using namespace std;


void* thread_run(void* args)
{
    pthread_detach(pthread_self());
    int num = *((int*)args);
    while(1)
    {
        printf("我是新线程[%d],我创建的线程ID是: %lu\n", num, pthread_self());
        sleep(2);
        break;
    }

    //return (void*)111;
    //pthread_exit((void*)123);
}

#define NUM 1

int main()
{
    pthread_t tid[NUM];
    for(int i = 0; i < NUM; i++)
    {
        pthread_create(tid + i, nullptr, thread_run, (void*)&i);
        sleep(1);
    }
    
    printf("wait sub thread...\n");
    sleep(5);
    printf("cancel sub thread...\n");
    pthread_cancel(tid[0]);

    //void* 32/4, 64/8, 指针变量， 本身就可以充当某种容器保存数据
    void* status = nullptr;

    //退出信息，异常呢？不需要处理
    //这里的返回值可以是其他的变量，对象的地址（不是临时的）
    int ret = pthread_join(tid[0], &status);

    printf("ret: %d, status: %lld\n",ret, (long long)status);
    sleep(3);
    // while(1)
    // {
    //     printf("我是主线程, 我创建的线程ID是: %lu, 我的线程ID是: %lu\n", tid, pthread_self());
    //     sleep(1);
    // }

    return 0;
}